home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 41 / Amiga Format CD41 (1999-06)(Future Publishing)(GB)[!][issue 1999-07].iso / -readerstuff- / steve_glover / source-code / cyberblanker.c < prev    next >
C/C++ Source or Header  |  1999-04-21  |  10KB  |  399 lines

  1.  
  2.    /***********************************************************************
  3.    *                                                                      *
  4.    *                            COPYRIGHTS                                *
  5.    *                                                                      *
  6.    *   Copyright (c) 1997  Zinneberg-Soft  All Rights Reserved.           *
  7.    *                                                                      *
  8.    ***********************************************************************/
  9.  
  10. #include "app.h"
  11. #include "local.h"
  12. #define SCREENWUNSH "PUBSCREEN"
  13. #define DEF_SCREEN "Workbench"
  14. #define DPMS_TOOL "DPMS"
  15. #define DEFAULT_DPMS_SETTING "OFF"
  16. #define FONT_NAME "FONTNAME"
  17. #define DEFAULT_FONTNAME "topaz.font"
  18. #define FONTS_SIZE "FONTSIZE"
  19. #define DEFAULT_FONTSIZE "8"
  20. #define WINDOW_X "WINDOWX"
  21. #define DEFAULT_WINDOW_X 134
  22. #define WINDOW_Y "WINDOWY"
  23. #define DEFAULT_WINDOW_Y 64
  24. #define SCREEN_WANTED_WIDTH  1480L
  25. #define SCREEN_WANTED_HEIGHT 7240L
  26. #define SCREEN_WANTED_DEPTH   24L
  27. #define SCREEN_MIN_DEPTH       8L
  28. #define BLANK   1L
  29. #define UNBLANK 2L
  30. ULONG NextDepth(ULONG );
  31. ULONG DisplayID,Depth;
  32. ULONG timeout = 0L;
  33. ULONG blanked = 0L;
  34. ULONG seconds = 10L;
  35. ULONG Windowx = 134;
  36. ULONG Windowy = 120;
  37. ULONG SET_DPMS_GADGET = 5L;
  38. LONG BlankerCommand;
  39.   char *fontname;
  40.   char *fontsize;
  41.   extern struct Custom custom;
  42.   extern struct TextAttr *mydesiredfont;
  43.   struct Screen *cybscreenasked;
  44.   struct Screen *CyberScreen = NULL;
  45.   struct Gadget *secgad;
  46.   struct Gadget *dpms_cyclegad;
  47. UBYTE  start_on_publicscreen[MAXPUBSCREENNAME];
  48. int DPMS_WANTED = NULL;
  49.  
  50. /*****************************************/
  51.  
  52. VOID BlankerAction(struct CxMsg *cxm,CxObj *co);
  53. VOID Blank(VOID);
  54. VOID UnBlank(VOID);
  55. VOID mysetupCustomGadgets(struct Gadget **gad);
  56. BOOL setupBlanker(VOID)
  57. {
  58.  
  59.  char   *dpms_tool_type;
  60.  char   *screen_tool_type;
  61.  CxObj  *objectlist;
  62.    
  63.    seconds = ArgInt( ttypes, "SECONDS", 60 );
  64.    screen_tool_type = ArgString( ttypes,SCREENWUNSH,DEF_SCREEN);
  65.    strcpy(start_on_publicscreen, screen_tool_type);
  66. fontname = ArgString( ttypes,FONT_NAME,DEFAULT_FONTNAME);
  67. fontsize = ArgString( ttypes,FONTS_SIZE,DEFAULT_FONTSIZE);
  68.  Windowx = ArgInt( ttypes,WINDOW_X,DEFAULT_WINDOW_X);
  69.  Windowy = ArgInt( ttypes,WINDOW_Y,DEFAULT_WINDOW_Y);
  70.       /**************************/
  71.     dpms_tool_type = ArgString( ttypes,DPMS_TOOL,DEFAULT_DPMS_SETTING);
  72.       if(strcmpi(dpms_tool_type,"OFF")==0)
  73.           {
  74.            SSET_DPMS_OFF();
  75.           }
  76.       if(strcmpi(dpms_tool_type,"H")==0)
  77.           {
  78.            SSET_DPMS_STANDBY();
  79.           }
  80.       if(strcmpi(dpms_tool_type,"V")==0)
  81.           {
  82.            SSET_DPMS_SUSPEND();
  83.           }
  84.  
  85.    /********************************************************/
  86.  
  87.   
  88.    objectlist=CxCustom( BlankerAction, 0L);
  89.  
  90.    if (CxObjError(objectlist))
  91.   {
  92.    D( printf("nocapslock: filter error %lx\n", CxObjError(objectlist) ) );
  93.     DeleteCxObjAll(objectlist);
  94.     return(0);
  95.   }
  96.  
  97.    AttachCxObj(broker, objectlist);
  98.    return(TRUE);
  99. }
  100. VOID BlankerAction(struct CxMsg *cxm,CxObj *co)
  101. {
  102.    register struct InputEvent *ie;
  103.  
  104.    /* D( kprintf("BlankerAction\n") ); */
  105.  
  106.    /* I KNOW that all messages getting this far are CXM_IEVENT   */
  107.    ie = (struct InputEvent *) CxMsgData((CxMsg *)cxm);
  108.  
  109.  
  110.    if(ie->ie_Class==IECLASS_TIMER)
  111.    {
  112.       /* D( printf("IECLASS_TIMER\n"); ) */
  113.       if(! blanked)
  114.       {
  115.       /*D( printf("blanked=0x%lx Bump timeout=%ld\n",blanked,timeout);)*/
  116.          if(++timeout >= ((ULONG)(seconds*10L)))
  117.          {
  118.             D( printf("########Blank Screen\n"); )
  119.             /* Blank(); */
  120.             BlankerCommand=BLANK;
  121.             Signal(maintask,csigflag);
  122.             blanked=TRUE;
  123.          }
  124.       }
  125.    } else {
  126.       if(ie->ie_Class!=IECLASS_TIMER)
  127.       {
  128.          D( printf("########UnBlank\n"); )
  129.          /* UnBlank(); */
  130.          BlankerCommand=UNBLANK;
  131.          Signal(maintask,csigflag);
  132.          timeout=0L;
  133.          blanked=FALSE;
  134.       }
  135.    }
  136.  
  137. }
  138. VOID Blank(VOID)
  139. {
  140. /* Let CyberGraphX search a display mode for us! */
  141.  
  142.  Depth=SCREEN_WANTED_DEPTH;
  143.  while (Depth)
  144.   {
  145.    if ((DisplayID=BestCModeIDTags(CYBRBIDTG_NominalWidth, SCREEN_WANTED_WIDTH,
  146.                                   CYBRBIDTG_NominalHeight,SCREEN_WANTED_HEIGHT,
  147.                                   CYBRBIDTG_Depth,Depth,
  148.                                   TAG_DONE))!=INVALID_ID)
  149.     {
  150. /* Because older version of the "cybergraphics.library" don't handle */
  151. /* CYBRBIDTG_Depth properly we query the real depth of the mode.     */
  152.  
  153.      Depth=GetCyberIDAttr(CYBRIDATTR_DEPTH,DisplayID);
  154.      break;
  155.     }
  156. /* retry with less bits per pixel */
  157.    Depth=NextDepth(Depth);
  158.   }
  159.  
  160.  if (Depth<SCREEN_MIN_DEPTH)
  161.   {
  162.    
  163.    ErrorF ("Can't find a CyberGraphics ScreenMode!");
  164.  
  165.   terminate();
  166.   }
  167.  
  168. /* open screen, but let Intuition choose the actual dimensions */
  169.  
  170.  if ((CyberScreen=OpenScreenTags(NULL,
  171.                               SA_DisplayID,DisplayID,
  172.                               SA_Depth,Depth,
  173.                               TAG_DONE))==NULL)
  174.   {
  175.    ErrorF ("Can't find a Suitable CyberGraphics ScreenMode!");
  176.   terminate();
  177.   }
  178. CVideoCtrlTags (&CyberScreen->ViewPort,SETVC_DPMSLevel,DPMS_WANTED,TAG_DONE);
  179.  }
  180.  
  181. VOID UnBlank(VOID)
  182. {
  183.    if(CyberScreen)
  184.    {
  185.   CVideoCtrlTags (&CyberScreen->ViewPort,SETVC_DPMSLevel,DPMS_ON,TAG_DONE);
  186.       CloseScreen(CyberScreen);
  187.       CyberScreen=NULL;
  188.    }
  189. }
  190.  
  191. STRPTR DPMSLabels[] =
  192. {
  193.       "H",
  194.       "V",
  195.       "H/V",           
  196.        NULL,
  197. };
  198.  
  199. VOID mysetupCustomGadgets(struct Gadget **gad)
  200. {
  201.    struct NewGadget ng;
  202.  
  203.    ng.ng_VisualInfo=vi;
  204.    ng.ng_TopEdge    = topborder+32;
  205.    ng.ng_LeftEdge = 110;
  206.    ng.ng_Width      = 60;
  207.    ng.ng_Height = 20;
  208.    ng.ng_GadgetText = " ";
  209.    ng.ng_TextAttr   = mydesiredfont;
  210.    ng.ng_GadgetID = GAD_CYCLE;
  211.    ng.ng_Flags = NG_HIGHLABEL;
  212.    ng.ng_VisualInfo = vi;
  213.    dpms_cyclegad = *gad = CreateGadget(CYCLE_KIND, *gad, &ng,
  214.         GTCY_Labels, DPMSLabels,
  215.         GTCY_Active, SET_DPMS_GADGET,
  216.         TAG_DONE);
  217.  
  218.    ng.ng_TopEdge    = topborder+32;
  219.    ng.ng_LeftEdge   = 10;
  220.    ng.ng_Width      = 40;
  221.    ng.ng_Height     = 20;
  222.    ng.ng_GadgetText = "Hide";
  223.    ng.ng_TextAttr   = mydesiredfont;
  224.    ng.ng_GadgetID   = GAD_HIDE;
  225.    ng.ng_Flags      = NULL;
  226.    ng.ng_VisualInfo = vi;
  227.    *gad = CreateGadget(BUTTON_KIND,*gad, &ng,TAG_DONE);
  228.    
  229.    ng.ng_TopEdge    = topborder+32;
  230.    ng.ng_LeftEdge   = 60;
  231.    ng.ng_Width      = 40;
  232.    ng.ng_Height     = 20;
  233.    ng.ng_GadgetText = "Quit";
  234.    ng.ng_TextAttr   = mydesiredfont;
  235.    ng.ng_GadgetID   = GAD_DIE;
  236.    ng.ng_Flags      = NULL;
  237.    ng.ng_VisualInfo = vi;
  238.    *gad = CreateGadget(BUTTON_KIND,*gad, &ng,TAG_DONE);
  239.  
  240.    ng.ng_TopEdge    = topborder+5;
  241.    ng.ng_LeftEdge   = 100;
  242.    ng.ng_Width      = 60;
  243.    ng.ng_Height     = 22;
  244.    ng.ng_GadgetText = "Seconds";
  245.    ng.ng_TextAttr   = mydesiredfont;
  246.    ng.ng_GadgetID   = GAD_SECS;
  247.    ng.ng_Flags      = NULL;
  248.    ng.ng_VisualInfo = vi;
  249.    secgad = *gad = CreateGadget(INTEGER_KIND,*gad, &ng,GTIN_Number,seconds,GTIN_MaxChars,4,STRINGA_Justification,STRINGRIGHT,TAG_DONE);
  250. }
  251.  
  252. VOID myHandleGadget(ULONG gad,ULONG code)
  253. {
  254.  /*  D( kprintf("custom: HandleGadget(%lx)\n",gad); )    */
  255.    switch(gad)
  256.    {
  257.  /****************************************************************/
  258.    case GAD_CYCLE:
  259.  
  260.         {  while (code == 0)
  261.            {
  262.            DPMS_WANTED = DPMS_STANDBY;
  263.            break;
  264.            }
  265.            while (code == 1)
  266.            {
  267.            DPMS_WANTED = DPMS_SUSPEND;
  268.            break;
  269.            }
  270.            while (code == 2)
  271.            {
  272.            DPMS_WANTED = DPMS_OFF;
  273.            break;
  274.            }
  275.  
  276.        }
  277.  
  278.      default: break;
  279.  
  280.  
  281.       case GAD_HIDE:
  282.           /*  D( kprintf("custom: HandleGadget() GAD_HIDE\n"); )   */
  283.             shutdownWindow();
  284.             break;
  285.  
  286.  
  287.       case GAD_DIE:
  288.         /*    D( kprintf("custom: HandleGadget() GAD_DIE\n"); ) */
  289.             terminate();
  290.  
  291.  
  292.       case GAD_SECS:
  293.          /*   D( kprintf("custom: HandleGadget() GAD_SECS\n"); )  */
  294.             seconds=((struct StringInfo *)secgad->SpecialInfo)->LongInt;
  295.            
  296.    }
  297. }
  298.  
  299. VOID MyHandleCustomSignal(VOID)
  300. {
  301.  /*  D( kprintf("custom: MyHandleCustomSignal() enter\n"); )   */
  302.    if(BlankerCommand==BLANK)
  303.       Blank();
  304.    else
  305.       if(BlankerCommand==UNBLANK)
  306.          UnBlank();
  307. }
  308.  
  309.  
  310. ULONG NextDepth(ULONG Depth)
  311. {
  312.  switch (Depth)
  313.   {
  314.    case 24L: /* 24Bit not available? Try 16Bit!      */
  315.     return 16L;
  316.    case 16L: /* 15Bit not available? Try 15Bit!      */
  317.     return 15L;
  318.    default:  /* Not even 15Bit available? Forget it! */
  319.     return 0L;
  320.   }
  321. }
  322.  
  323.  
  324.  
  325. VOID SHOWABOUT()
  326. {
  327.  EasyRequest(window,
  328.  &aboutcybereasy,NULL);
  329. }
  330.  
  331. VOID SHOWCONFIG()
  332. {
  333.  EasyRequest(window,
  334.  &progconfig,NULL);
  335. }
  336.  /*******************************************/
  337. void ErrorF(char *Format,...)
  338.  
  339. {
  340.  void *Data;
  341.  
  342.  Data= &Format+1L;
  343.  if (((struct Process *)FindTask(NULL))->pr_CLI)
  344.   {
  345.    (void)VPrintf(Format,Data);
  346.    (void)FPutC(Output(),'\n');
  347.    (void)Flush(Output());
  348.   }
  349.  else
  350.   {
  351.    struct EasyStruct EasyStruct;
  352.    ULONG IDCMPFlags;
  353.  
  354.    EasyStruct.es_StructSize=sizeof(struct EasyStruct);
  355.    EasyStruct.es_Flags=0L;
  356.    EasyStruct.es_Title="CyberBlanker FatalError";
  357.    EasyStruct.es_TextFormat=Format;
  358.    EasyStruct.es_GadgetFormat="Ok";
  359.  
  360.    IDCMPFlags=0L;
  361.    (void)EasyRequestArgs(NULL,&EasyStruct,&IDCMPFlags,Data);
  362.   }
  363. }
  364.  
  365.  /***************************************************/
  366.  
  367. VOID SSET_DPMS_STANDBY()
  368. {
  369. SET_DPMS_GADGET = 0;
  370. DPMS_WANTED = DPMS_STANDBY;
  371.     GT_SetGadgetAttrs(dpms_cyclegad, window, NULL,
  372.     GTCY_Active,  SET_DPMS_GADGET, TAG_DONE);
  373. }
  374.  
  375. VOID SSET_DPMS_OFF()
  376. {
  377. SET_DPMS_GADGET = 2;
  378. DPMS_WANTED = DPMS_OFF;
  379.     GT_SetGadgetAttrs(dpms_cyclegad, window, NULL,
  380.     GTCY_Active,  SET_DPMS_GADGET, TAG_DONE);
  381. }
  382.  
  383.  
  384. VOID SSET_DPMS_SUSPEND()
  385. {
  386. SET_DPMS_GADGET = 1;
  387. DPMS_WANTED = DPMS_SUSPEND;
  388.     GT_SetGadgetAttrs(dpms_cyclegad, window, NULL,
  389.     GTCY_Active,  SET_DPMS_GADGET, TAG_DONE);
  390. }
  391.  
  392.  
  393. /*
  394. VOID SAVECONFIG()
  395. {
  396.  
  397. }
  398. */
  399.